/********************************
功  能：定时/计数器查询方式实现1s流水灯
编程人：ZZT
版  本：V1.0
时  间：2023/12/22
**********************************/
//头文件声明
#include <Reg51.h>
#include <intrins.h>

//全局变量的声明
unsigned char timerCnt;//计数次数
unsigned char temp =0xFE;

//IO的声明
sbit LED = P2^0;

//函数的声明
void timer0_Init();//定时器0初始化

/**********************************
函数名：main
功  能：完成程序模块的调用
参  数：无
返回值：无
***********************************/
void main()
{
	timer0_Init();
	while(1)
	{
		if (1 == TF0)
		{
			TF0 = 0;
			TH0 = (65536 - 18432) / 256;//重新赋值，便于产生下一次的20ms定时
			TL0 = (65536 - 18432) % 256;
			//1s = 1000ms/20ms = 50次
			timerCnt++;
			if (timerCnt >= 50)//1s到
			{
				timerCnt = 0;
				P2 = temp; 
				temp = _crol_(temp, 1);
			}
		}
	}
}

/**********************************
函数名：timer0_Init
功  能：定时器0初始化
参  数：无
返回值：无
***********************************/
void timer0_Init()
{
	//1、设置TMOD 确定工作方式 定时 工作方式1 GATE 0
	TMOD = 0x01;//GATE C/T M1 M0 GATE C/T M1 M0 
	//2、定值初值的计算 20ms 11.0592MHZ
	TH0 = (65536 - 18432) / 256;
	TL0 = (65536 - 18432) % 256;
	//3、打开定时/计数器
	TR0 = 1;//启动定时计数器
}